//
//  ABPlaceholderTextView.swift
//  microblog
//
//  Created by 安波 on 15/11/5.
//  Copyright © 2015年 anbo. All rights reserved.
//

import UIKit
import FFAutoLayout

class ABPlaceholderTextView: UITextView {
    
    // MARK: - 属性
    /// 占位文本
    var placeholder: String? {
        didSet{
            // 应用属性监听来让外界访问
            placeholderLabel.text = placeholder
            placeholderLabel.sizeToFit()
            
            // 设置占位文本的font 等于 UITextView的font
            placeholderLabel.font = font
        }
    }
    
    // MARK: - 构造方法
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        // 准备UI
        prepareUI()
        // 设置自己为自己的代理(注意：当设置自己为自己的代理时，会存在很大的风险，很容被外界覆盖代理，而失去想有的效果)
//        delegate = self
        
        // 使用通知来监听文本的改变
        /*
             object: 通知的发送者
             object: 如果填nil,任何人发送的 UITextViewTextDidChangeNotification都能监听
             object: self表示只有自己发送的 UITextViewTextDidChangeNotification才能监听到
         */
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "textDidChange", name: UITextViewTextDidChangeNotification, object: self)
    }
    
    /// 移除通知
    deinit{
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    
    /// 监听文字的改变
    func textDidChange() {
        // 监听到了文本已经改变了
        // hasText()是当文本有文字的时候，隐藏占位文本
        placeholderLabel.hidden = hasText()
    }

    
    // MARK: - 准备UI
    private func prepareUI() {
        // 添加子控件
        addSubview(placeholderLabel)
        
        // 添加约束
        placeholderLabel.ff_AlignInner(ff_AlignType.TopLeft, referView: self, size: nil, offset: CGPoint(x: 5, y: 8))
    }

    // MARK: - 懒加载
    /// 添加占位文本
    private lazy var placeholderLabel: UILabel = {
        // 创建label并设置字体大小和颜色
       let label = UILabel(fonsize: 18, textColor: UIColor.lightGrayColor())
        
        return label
    }()
}

// TODO: 扩展ABPlaceholderTextView，实现UITextViewDelegate协议
//extension ABPlaceholderTextView: UITextViewDelegate {
//    
//    // 当textView文字改变的时候会调用
//    func textViewDidChange(textView: UITextView) {
//        // 当文本中有文字时，隐藏占位文本
//        placeholderLabel.hidden = hasText()
//    }
//    
//}
